package deposito.dao;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import deposito.dto.Articulo;
import deposito.dto.ItemSolicitudFabricacion;
import deposito.dto.SolicitudFabricacion;
import deposito.entities.ItemSolicitudFabricacionEntity;
import deposito.entities.SolicitudFabricacionEntity;

@Stateless
public class SolicitudFabricacionDAO implements ISolicitudFabricacionDAO {
	
	//Entity Manager
	@PersistenceContext(unitName="IA_DS")
	private EntityManager manager;
	
	@EJB
	IArticuloDAO IArticulo; 
	
	public SolicitudFabricacion buscarSolicitudFabricacion(int idSolicitudFabricacion) {
		String query = "from SolicitudFabricacionEntity sfE WHERE sfE.id = ?";
		Query q = manager.createQuery(query).setParameter(1,idSolicitudFabricacion);
		SolicitudFabricacionEntity sol = (SolicitudFabricacionEntity) q.getSingleResult();
		
		return sol.toDTO();
	}
/*
	@Override
	public SolicitudFabricacion buscarSolicitudFabricacion(int idModulo, int idOrigen) {
		String query = "from SolicitudFabricacionEntity sfE WHERE sfE.idModulo = ?  AND sfE.idOrigen = ?";
		Query q = manager.createQuery(query).setParameter(0,idModulo).setParameter(1, idOrigen);
		SolicitudFabricacionEntity sol = (SolicitudFabricacionEntity) q.getSingleResult();
		
		return sol.toDTO();
	}*/

	@SuppressWarnings("unchecked")
	@Override
	public List<SolicitudFabricacion> obtenerSolicitudesFabricacionEstado(String estado) {
		String query = "from SolicitudFabricacionEntity sfE WHERE sfE.estado = ?";
		Query q = manager.createQuery(query).setParameter(1,estado);
		List<SolicitudFabricacionEntity> solList = (List<SolicitudFabricacionEntity>) q.getResultList();
		
		List<SolicitudFabricacion> listaResult = new ArrayList<SolicitudFabricacion>();
		for (SolicitudFabricacionEntity sol : solList){
			listaResult.add(sol.toDTO());
		}
		return listaResult;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<SolicitudFabricacion> obtenerSolicitudesFabricacion() {
		String query = "from SolicitudFabricacionEntity";
		Query q = manager.createQuery(query);
		List<SolicitudFabricacionEntity> solList = (List<SolicitudFabricacionEntity>) q.getResultList();
		
		List<SolicitudFabricacion> listaResult = new ArrayList<SolicitudFabricacion>();
		for (SolicitudFabricacionEntity sol : solList){
			listaResult.add(sol.toDTO());
		}
		return listaResult;
	}

	@Override
	public SolicitudFabricacion agregarSolicitudFabricacion(SolicitudFabricacion solicitudFabricacion) {
		SolicitudFabricacionEntity solE = this.SolicitudFabricaciontoEntity(solicitudFabricacion);
		manager.persist(solE);
		SolicitudFabricacion solDto = solE.toDTO();
		return solDto;
	}

	@Override
	public void ModificarSolicitudFabricacion(SolicitudFabricacion solicitudFabricacion) {
		manager.merge(this.SolicitudFabricaciontoEntity(solicitudFabricacion));
	}

	@Override
	public void eliminarSolicitudFabricacion(int idSolicitudFabricacion) {

	}

	
	//toEntity
	public SolicitudFabricacionEntity SolicitudFabricaciontoEntity(SolicitudFabricacion sol){
		SolicitudFabricacionEntity solFEntity = new SolicitudFabricacionEntity();
		
		solFEntity.setEstado(sol.getEstado());
		solFEntity.setFechaEntrega(sol.getFechaEntrega());
		solFEntity.setFechaSolicitud(sol.getFechaSolicitud());
		solFEntity.setId(sol.getId());
		solFEntity.setIdModulo(sol.getIdModulo());

		
		for (ItemSolicitudFabricacion art : sol.getArticulos()){
			
			solFEntity.getArticulos().add(this.itemSolicitudFabricacionEntity(art, solFEntity));
		}
		
		return solFEntity;
	}
	
	
	public ItemSolicitudFabricacionEntity itemSolicitudFabricacionEntity(ItemSolicitudFabricacion item, SolicitudFabricacionEntity solE){
		ItemSolicitudFabricacionEntity itemEntity = new ItemSolicitudFabricacionEntity();
		
		itemEntity.setCantidad(item.getCantidad());
		if (item.getId() != 0)
			itemEntity.setId(item.getId());
		//itemEntity.setSolicitud(solE);
		Articulo artDTO = IArticulo.buscarArticulo(item.getArticulo().getCodigo());
		itemEntity.setArticulo(IArticulo.toEntity(artDTO));
		
		return itemEntity;
	}


}
